iT邦幫忙

2022 iThome 鐵人賽

DAY 29
0
Modern Web

.NET教我做人系列 第 29

Day29 如何包我們的IMAGE

  • 分享至 

  • xImage
  •  

嗨~大家好啊,今天是鐵人賽的倒數第二天,我又開心又興奮,終於快要結束這艱辛的30天。昨天我們說了紀錄的一些工具與簡單的使用後,今天要來練習如何把我們的專案包成一個Image 提供給別人使用!

今天主要是針對ASP.NET Core 的專案使用Dockerfile 來包成Image,所以docker 的用途在今天就不會多做介紹,那我們就開始今天的主題~

Image

在這裡我們預先會使用到微軟提供的兩個Image 分別為dotnet/sdkdotnet/aspnet

  • dotnet/sdk
    範例會使用此映像來建置應用程式。 映射包含 .NET SDK,其中包含命令列工具 (CLI) 。 此映像會最佳化來進行本機開發、偵錯和單元測試。 安裝用於開發和編譯的工具會使映射變得相對大

  • dotnet/aspnet
    範例會使用此映像來執行應用程式。 此映像包含 ASP.NET Core 執行階段和程式庫,並會進行最佳化,以在生產環境中執行應用程式。 專為部署和應用程式啟動速度而設計的映像相對較小,因此,已將從 Docker 登錄到 Docker 主機的網路效能最佳化。 只會將執行應用程式所需的程式庫和內容複製到容器中。 內容已準備好執行,可用最短的時間從 docker run 到應用程式啟動。 在 Docker 模型中,不需要動態程式碼編譯

若有需要可以到官網提供的Github 來看看其他image的功能與用途 Github_link

手動建設 & 部署

如今我們要將專案部屬到容器實,我們為了要節省專案的空間,我們會透過下列的方式來幾單的啟動我們的服務

dotnet publish -c Release -o published

執行完此指令會我們會產生一個新的published 的資料夾,在這資料的東西就能幫我們快速的啟動專案,而且此指令不單純只有run 而已還會有偵錯的模式

dotnet publish\<projectName>.dll

接著我們照這指令就可以啟動我們的專案

這樣的方式可以簡單的啟用我們的專案,所以在部屬實就會用它來幫我們起服務

Dockerfile

這個Dockerfile 起起來後就可以開啟我們做的專案,細節的部份我有寫在裡面

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /dotnet

# 透過restore 把相關的NuGet套件安裝下來
COPY <projectName>/*.csproj ./<projectName>/
RUN dotnet restore

# 這裡就是上方剛才介紹的功能
COPY <projectName>/. ./<projectName>/
WORKDIR /dotnet/<projectName>
RUN dotnet publish -c release -o /app --no-restore

# 最後在aspnet 的image 把專案開起來
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build /app ./
ENTRYPOINT ["dotnet", "<projectName>.dll"]

先透過我們的Dockerfile 創Image

docker build -t dotnet --no-cache .

使用剛才的Image 來起我們的Container

docker run -it --rm -p 5000:5000 -i dotnet

最後要是沒出甚麼意外的話我們的專案應該就可以拿來用,要是你開專案實沒看到Swagger 的話是正常的,要改的地方會再Program.cs 裡的這段

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

這裡由於在開發環境下才會使用Swagger,所以你不想要這樣就把這判斷是除掉,再重部屬Image就會看到Swagger了

那今天介紹了要怎麼把我們的專案部屬Docker 上,這樣的方式可以快速又簡單的啟用我們的服務,這樣的方式對工程師來說根本家常便飯,希望大家會喜歡今天的鐵人賽,我們就最後一天見啦~~~


上一篇
Day28 Log 記錄管理
下一篇
Day30 不講功能只講我想說的
系列文
.NET教我做人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言